home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK1.toast / Development Kits (Disc 1) / QuickDraw GX / Programming Stuff / GX Libraries / QDGXMovieLibrary.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-04  |  2.5 KB  |  105 lines  |  [TEXT/MPS ]

  1.  
  2. /*
  3.     File:        QDGXMovieLibrary.c
  4.  
  5.     Contains:    graphics libraries - GX movies
  6.  
  7.     Written by:    Mike Reed
  8.  
  9.     Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  10.  
  11.     Change History (most recent first):
  12.  
  13.          <2>      5/4/95    JD        changing DisposHandle to DisposeHandle
  14.          <1>      5/2/95    jtd        First checked in.
  15.  
  16. */
  17.  
  18. #include <QuickDraw.h>
  19. #include <QDOffscreen.h>
  20. #include <Memory.h>
  21. #include <Movies.h>
  22. #include <MoviesFormat.h>
  23. #include <ImageCompression.h>
  24. #include <GXMath.h>
  25. #include <DecompressShapeLibrary.h>
  26. #include <QDGXMovieLibrary.h>
  27.  
  28. #ifdef debugging
  29.     #define CheckOSErr(err)    if (err) DebugStr("\pOS error"); else
  30. #else
  31.     #define CheckOSErr(err)
  32. #endif
  33.  
  34. void InitializeQDGXRecorder(QDGXRecorder *mr, const FSSpec* spec, Fixed width, Fixed height)
  35. {
  36.     OSErr    err;
  37.  
  38.     EnterMovies();        // This can be nested with other calls to EnterMovies()
  39.  
  40.     mr->description    = (ImageDescriptionHandle)NewHandleClear(sizeof(ImageDescription));
  41.  
  42.     if (mr->description == nil)
  43.         return;
  44.  
  45.     {    ImageDescriptionPtr    descPtr;
  46.  
  47.         descPtr = *mr->description;
  48.         descPtr->idSize = sizeof(ImageDescription);
  49.         descPtr->cType = 'qdgx';
  50.         descPtr->vendor = 'appl';
  51.         descPtr->temporalQuality = codecLosslessQuality;
  52.         descPtr->width = FixedRound(width);
  53.         descPtr->height = FixedRound(height);
  54.         descPtr->hRes = descPtr->vRes = ff(72);
  55.         descPtr->dataSize = 0;
  56.         descPtr->frameCount = 1;
  57.         descPtr->depth = 32;
  58.         descPtr->clutID = -1;
  59.     }
  60.  
  61.     mr->movieDataSpec = *spec;
  62.     err = CreateMovieFile(&mr->movieDataSpec, 'TVOD',  0, createMovieFileDeleteCurFile,
  63.                 &mr->resourceRefNum, &mr->movie);
  64.     CheckOSErr(err);
  65.  
  66.     mr->track = NewMovieTrack(mr->movie, width, height, 0);
  67.     mr->media = NewTrackMedia(mr->track, VideoMediaType, 600, 0, 0);
  68.  
  69.     BeginMediaEdits(mr->media);
  70. }
  71.  
  72. void AddQDGXRecorderFrame(QDGXRecorder *mr, gxShape source, long duration, Boolean eraseBackground)
  73. {
  74.     OSErr    err;
  75.     Handle    shapeH;
  76.  
  77.     shapeH = CreateQDGXStream(source, nil, false, eraseBackground);
  78.     if (shapeH)
  79.     {    err = AddMediaSample(mr->media, shapeH, 0, GetHandleSize(shapeH),
  80.                     duration, (SampleDescriptionHandle)mr->description, 1, 0, nil);
  81.         CheckOSErr(err);
  82.         DisposeHandle(shapeH);
  83.     }
  84. }
  85.  
  86. void TerminateQDGXRecorder(QDGXRecorder *mr)
  87. {
  88.     OSErr    err;
  89.  
  90.     err = EndMediaEdits(mr->media);
  91.     CheckOSErr(err);
  92.     err = InsertMediaIntoTrack(mr->track, 0, 0, GetMediaDuration(mr->media), fixed1);
  93.     CheckOSErr(err);
  94.  
  95.     err = AddMovieResource(mr->movie, mr->resourceRefNum, 0, 0);
  96.     CheckOSErr(err);
  97.     err = CloseMovieFile(mr->resourceRefNum);
  98.     CheckOSErr(err);
  99.  
  100.     DisposeMovie(mr->movie);
  101.     
  102.     ExitMovies();
  103. }
  104.  
  105.